home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 22
/
Cream of the Crop 22.iso
/
doom
/
server_1.zip
/
_RANK.QC
< prev
next >
Wrap
Text File
|
1996-10-04
|
6KB
|
196 lines
/*
**
** _rank.qc (Rank Code, 1.2)
**
** Copyright (C) 1996 Johannes Plass
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
**
** Author: Johannes Plass (plass@dipmza.physik.uni-mainz.de)
**
*/
void(entity player,entity sort) RankPrintRank;
void(entity player) RankInfo =
{
if (!USE_MODULE_RANK) return;
// 123456789#123456789#123456789#12345678
sprint(player,"£");
sprint(player," Rank");
sprint(player, " provides extended rankings.\n");
sprint(player," Type 'help-rank' for help.\n");
};
void(entity player) RankInit =
{
if (!USE_MODULE_RANK) return;
stuffcmd(player,"alias rank \"impulse 203\";\n");
stuffcmd(player,"alias help-rank \"impulse 204\";\n");
};
void(entity player) RankActiveMessage =
{
if (!USE_MODULE_RANK) return;
// 123456789#123456789#123456789#12345678
sprint(player," Rank (help-rank)\n");
};
void(entity player) RankHelp =
{
if (!USE_MODULE_RANK) return;
// 123456789#123456789#123456789#12345678
sprint(player,"Rank:");
sprint(player, " provides extended rankings.\n");
sprint(player,"Type 'rank' to display a list of\n");
sprint(player,"current ranks in the format\n");
sprint(player," TOT = KILL DEATH ACCID = PLAYER\n");
sprint(player,"where\n");
sprint(player," PLAYER : name of player\n");
sprint(player," TOT : his total score\n");
sprint(player," KILL : how many he killed\n");
sprint(player," DEATH : how many killed him\n");
sprint(player," ACCID : his deathly accidents\n");
sprint(player,"Formula for TOT:\n");
sprint(player," TOT = 3*KILL - DEATH - 3*ACCID\n");
};
void(entity player,float event) RankCountEvent =
{
if (!USE_MODULE_RANK) return;
if (event == RANK_KILL) player.rank_kills = player.rank_kills + 1;
else if (event == RANK_DEATH) player.rank_deaths = player.rank_deaths + 1;
else if (event == RANK_ACCIDENT) player.rank_accidents = player.rank_accidents + 1;
else if (event == RANK_SUICIDE) player.rank_suicides = player.rank_suicides + 1;
player.rank_total = 3 * player.rank_kills
- player.rank_deaths
- 3 * player.rank_accidents
- 6 * player.rank_suicides
;
};
void(entity targ, entity attacker) RankClientObituary =
{
//dprint ("RankClientObituary: executing\n");
if (!USE_MODULE_RANK) return;
if (targ.classname == "player") {
if (attacker.classname == "teledeath") {
// telefragging
RankCountEvent(attacker,RANK_KILL);
RankCountEvent(targ,RANK_DEATH);
} else if (attacker.classname == "teledeath2") {
// never seen in game, so may be wrong here
RankCountEvent(targ,RANK_ACCIDENT);
} else if (attacker.classname == "player") {
if (targ == attacker) {
// player killed by own weapon
RankCountEvent(targ,RANK_ACCIDENT);
} else {
// attacker killed target
RankCountEvent(attacker,RANK_KILL);
RankCountEvent(targ,RANK_DEATH);
}
} else {
// player killed by environment (slime, water, lava etc.)
RankCountEvent(targ,RANK_ACCIDENT);
}
}
};
void(entity player,float n,float digits) RankPrintRankNumber =
{
local string ns;
if (n<0) {
if (digits > 3 && n >= -99) sprint (player," ");
if (digits > 2 && n >= -9) sprint (player," ");
} else if (n >= 0) {
if (digits > 3 && n <= 999) sprint (player," ");
if (digits > 2 && n <= 99) sprint (player," ");
if (digits > 1 && n <= 9) sprint (player," ");
}
ns = ftos(n);
sprint (player,ns);
};
void(entity player,entity sort) RankPrintRank =
{
local float acc;
if (PlayerStatusPlayerIsBogusPlayer(sort)) return;
else if (sort.deadflag != DEAD_NO) sprint(player,"d");
else if (sort.player_status & PLAYER_IS_OBSERVER) sprint(player,"o");//#jp#(Observer)
else sprint(player," ");
RankPrintRankNumber(player,sort.rank_total,4);
sprint (player," = ");
RankPrintRankNumber(player,sort.rank_kills,3);
sprint (player," ");
RankPrintRankNumber(player,sort.rank_deaths,3);
sprint (player," ");
acc = sort.rank_accidents + sort.rank_suicides;
RankPrintRankNumber(player,acc,3);
sprint (player," = ");
sprint (player,sort.netname);
sprint (player,"\n");
};
void(entity player) RankDumpRanksToConsole =
{
local entity e, sort, walk;
if (!USE_MODULE_RANK) return;
if (world.chain) error ("RankDumpRanksToConsole: world.chain is set");
// build a sorted lis
e = find(world, classname, "player");
sort = world;
while (e) {
if (!sort) {
sort = e;
e.chain = world;
} else {
if (e.rank_total < sort.rank_total) {
e.chain = sort;
sort = e;
} else {
walk = sort;
do {
if (!walk.chain) {
e.chain = world;
walk.chain = e;
} else if (walk.chain.rank_total > e.rank_total) {
e.chain = walk.chain;
walk.chain = e;
} else
walk = walk.chain;
} while (walk.chain != e);
}
}
e = find(e, classname, "player");
}
while (sort) {
RankPrintRank (player,sort);
sort = sort.chain;
}
};